package Collection;

import java.util.*;

/**
 * 排序自定义类型元素
 */
public class SortListDemo1 {
    public static void main(String[] args) {
        List<Point> list =new ArrayList<>();
        list.add(new Point(1,2));
        list.add(new Point(97,98));
        list.add(new Point(7,6));
        list.add(new Point(9,9));
        list.add(new Point(5,4));
        list.add(new Point(2,3));
        System.out.println(list);
        /*
        Collections.sort(List list)在排序List集合时要求集合元素必须实现了
        Comparable接口.实现了该接口的类必须重写一个方法compareTo用于定义比较大小
        的规则,从而进行元素的比较厚排序.否则编译不通过.
        compare:比较.

        侵入性:
        当我们调用某个API时,其反过来要求我们为其修改其他额外的代码,这种现象就成为侵入性.侵入性
        不利于程序后期的维护,尽可能避免.
         */
//        Collections.sort(list)

        //匿名内部类的形式创建一个比较器.
        /**
         * 实现比较器接口厚必须重写方法compare.
         * 该方法用来定义参数o1和o2的比较大小规则
         * 返回值用来表示o1与o2的大小关系.
         */
//        Comparator com =new Comparator() {
//            @Override
//            public int compare(Object o1, Object o2) {
//                return 0;
//            }
//        };


//        Collections.sort(list,new Comparator<Point>() {
//            public int compare(Point o1, Point o2) {
//                int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
//                int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
//                return len1-len2;
//            }
//        });
        Collections.sort(list,(o1, o2)->
            o1.getX()*o1.getX()+o1.getY()*o1.getY()-
            o2.getX()*o2.getX()-o2.getY()*o2.getY()
        );

        System.out.println(list);
    }
}
